#include <stdio.h>
#include <string>
#include "Time.h"
#include "AircraftType.h"

#ifndef FLIGHT
#define FLIGHT

class Flight {
	private:

		std::string flightID;
		int aircraftID;
		Time* scheduledDepartureTime;	//Time aircraft should be at gate to begin servicing/boarding
		Time* takeOffTime;				//Time flight actually leaves gate stand
		Time* scheduledArrivalTime;		//Time aircraft should be at gate stand to begin servicing/disembarking
		Time* landingTime;				//Time flight finishes disembarking
		std::string departureGate;
		std::string arrivalGate;
		int delayAmount;				//delay amount in minutes
		std::string srcAirport;
		std::string destAirport;
		int incoming;
		int flightStatus;
		int approval;					//flag indicating whether Flight is part of Airport's schedule; 1 if yes, 0 if no
		int frequency;
		AircraftType* type;
		std::string airline;


	public:
		Flight();
		Flight(std::string _flightID, int _aircraftID, /*Time* _scheduledDepartureTime, */Time* _takeOffTime, std::string _departureGate, int _delayAmount, std::string destAP, int _freq);
		Flight(std::string _flightID, int _aircraftID, /*Time* _scheduledArrivalTime, */Time* _landingTime, std::string _arrivalGate, int _delayAmount, std::string srcAP, int _incoming, int _freq);
		 ~Flight(); 

		std::string getFlightID();
		Time* getDepartureTime();
		Time* getArrivalTime();
		void setDepartureTime(Time*);
		void setArrivalTime(Time*);
		void setLandingTime(Time* _landingTime);
		void setTakeOffTime(Time* _takeOffTime);
		Time* getLandingTime();
		Time* getTakeOffTime();
		std::string getDepartureGate();
		std::string getArrivalGate();
		int getDelayAmount();
		void increaseDelayAmount(int t);
		void setFlightID(std::string id);
		int getStatus ();
		int getAircraftID();
		void setAircraftID(int);
		void setWaiting ();
		void setBoarding ();
		void setFlying ();
		int getApprovalStatus();
		void grantApproval();
		void denyApproval();
		void setSrcAirport(std::string);
		void setDestAirport(std::string);
		std::string getSrcAirport();
		std::string getDestAirport();
		void setIncoming(int);
		int getIncoming();
		AircraftType* getType();
		void setType(AircraftType*);
		int getFrequency();

		// new methods, adds to documentation load 

};

#endif
